#ifndef _GAME_H
#define _GAME_H
#include <SDL.h>
#include "Scene.h"

namespace sg
{
    /**
     * @brief 游戏引擎类
     * @note 游戏引擎类，负责初始化游戏窗口、渲染器、场景等，并控制游戏循环
     * 继承自该类的子类需要实现play()函数，用于游戏逻辑，并在play()函数中调用setScene()和run()函数
     *
     */
    class GameEngine
    {
    private:
        int fps;                // 帧率
        bool isRunning;         // 是否运行中
        SDL_Window *window;     // 窗口
        SDL_Renderer *renderer; // 渲染器
        Scene *scene;           // 场景

    public:
        GameEngine();
        virtual ~GameEngine();
        void init();
        void setScene(Scene *scene);
        void run();
        void clean();
        bool getIsRunning();
        SDL_Renderer *getRenderer();
        void setIsRunning(bool);
        void setFPS(int);
        float getCurrentFPS();

        virtual void play() = 0;
    };
}

#endif // _GAME_H